﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Word=Microsoft.Office.Interop.Word;
using BusinessLayer.Interface;
using BusinessLayer.Facade;
using EntityLayer;

namespace PresentationLayer
{
    public partial class WebForm7 : System.Web.UI.Page
    {

        clsIFacadeEscritos ObjEscrito;
        DetalleEscritos ObjDetalle = new DetalleEscritos();
        List<DetalleEscritos> miLista = null;
        private IEnumerable<Object> lista = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                txtResolucion.Enabled = false;
                txtResolucion.Text = (string)Session["codLegajo"];
                Listar_TipoEscritos();
                Cargar_Escritos();
                Session["NomArchivo"] = "";
            }
        }
        protected void btnWord_Click(object sender, EventArgs e)
        {



            //Objeto del Tipo Word Application 
            Word.Application objWordApplication;
            //Objeto del Tipo Word Document 
            Word.Document objWordDocument;
            // Objeto para interactuar con el Interop 
            Object oMissing = System.Reflection.Missing.Value;
            //Creamos una instancia de una Aplicación Word. 
            objWordApplication = new Word.Application();
            //A la aplicación Word, le añadimos un documento. 
            string Archivo = Server.MapPath("~/ArchivosPrelejago/") + (string)dgEscritos.GetRowValues(dgEscritos.FocusedRowIndex, "NombreArchivo");
            objWordDocument = objWordApplication.Documents.Open(Archivo, ref oMissing, ref oMissing,
                                                             ref oMissing, ref oMissing);

            //Activamos el documento recien creado, de forma que podamos escribir en el 
            objWordDocument.Activate();
            //Empezamos a escribir

            //Hace visible la Aplicacion para que veas lo que se ha escrito 
            objWordApplication.Visible = true;

        }
        void Listar_TipoEscritos()
        {
            ObjEscrito = new clsFacadeEscritos();

            cboTipoEscrito.SelectedIndex = -1;

            lista = new List<Object>();
            ObjEscrito = new clsFacadeEscritos();
            lista = ObjEscrito.Listar();

            if (lista == null || lista.Count() == 0) { MostrarComentario("No hay Informacion."); return; }

            cboTipoEscrito.DataSource = lista;
            cboTipoEscrito.ValueField = "CO_TipoEscrito";
            cboTipoEscrito.TextField = "NO_Escrito";
            cboTipoEscrito.DataBind();
        }
        protected void cboTipoEscrito_SelectedIndexChanged(object sender, EventArgs e)
        {



        }
        private void MostrarComentario(String msg, String titulo = "Mensaje")
        {
            lblMensaje.Text = msg;
            pcMensaje.HeaderText = titulo;
            pcMensaje.ShowOnPageLoad = true;
        }
        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            AgregarItem();
        }
        void AgregarItem()
        {
            try
            {
                if (cboTipoEscrito.SelectedIndex == -1)
                {
                    MostrarComentario("Seleccione un Tipo de Escrito");
                    return;
                }
                if (Session["NomArchivo"].ToString().Length==0)
                {
                    MostrarComentario("Seleccione un Documento");
                    return;
                }
                int count = dgEscritos.VisibleRowCount;
                ObjDetalle.Item = count + 1;
                ObjDetalle.TipoEscrito = cboTipoEscrito.SelectedItem.Value.ToString() + ": " + cboTipoEscrito.SelectedItem.Text;
                ObjDetalle.Fecha = DateTime.Now;
                ObjDetalle.NombreArchivo = Session["NomArchivo"].ToString();
                 
                ObjDetalle.RutaArchivo = Server.MapPath("~/ArchivosPrelejago/");




                if (Session["Detalle_Escritos"] == null)
                {
                    miLista = new List<DetalleEscritos>();
                    miLista.Add(ObjDetalle);
                }
                else
                {
                    miLista = (List<DetalleEscritos>)Session["Detalle_Escritos"];
                    miLista.Add(ObjDetalle);
                }

                Session["Detalle_Escritos"] = miLista;
                dgEscritos.DataSource = miLista;
                dgEscritos.DataBind();

            }
            catch (Exception ex)
            {

                MostrarComentario(ex.Message, "Error");
            }

        }
        void QuitarItem()
        {
            try
            {

                miLista = (List<DetalleEscritos>)Session["Detalle_Escritos"];
                int index = dgEscritos.FocusedRowIndex;
                // int item = (int)dgEscritos.GetRowValues(index, "Item");
                // miLista.RemoveAll(x => x.Item == Convert.ToInt32(item));
                miLista.RemoveAt(index);
                //if (Session["Detalle_Escritos"] == null)
                //{
                //    miLista = new List<DetalleEscritos>();
                //    miLista.Add(ObjDetalle);
                //}
                //else
                //{
                //    miLista = (List<DetalleEscritos>)Session["Detalle_Escritos"];
                //    miLista.Add(ObjDetalle);
                //}

                Session["Detalle_Escritos"] = miLista;
                dgEscritos.DataSource = miLista;
                dgEscritos.DataBind();

            }
            catch (Exception ex)
            {

                MostrarComentario(ex.Message, "Error");
            }

        }
        private struct DetalleEscritos
        {
            public int Item { get; set; }
            public string TipoEscrito { get; set; }
            public string NombreArchivo { get; set; }
            public DateTime Fecha { get; set; }
            public string RutaArchivo { get; set; }
        }
        protected void btnQuitar_Click(object sender, EventArgs e)
        {
            QuitarItem();
        }
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("wfrmEscritoListar.aspx", true);
        }
        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            Grabar();
        }
        private void Grabar()
        {
            try
            {
                T_Escritos Ent_Escrito;
                List<T_Escritos> ListaEscrito = null;
                ListaEscrito = new List<T_Escritos>();
                int i = 0;
                if (Session["NomArchivo"].ToString().Length == 0)
                {
                    MostrarComentario("No existe Nombre de Archivo", "Error");
                    return;
                }
                while (i <= dgEscritos.VisibleRowCount - 1)
                {
                    Ent_Escrito = new T_Escritos();
                    Ent_Escrito.CO_Legajo = txtResolucion.Text;
                    Ent_Escrito.CO_TipoEscrito = ExtraeCodigo((string)dgEscritos.GetRowValues(i, "TipoEscrito"));
                    Ent_Escrito.FE_Escrito = (DateTime)dgEscritos.GetRowValues(i, "Fecha");
                    Ent_Escrito.no_Archivo = Session["NomArchivo"].ToString();
                    //ulDocumento.SaveAs(Server.MapPath("~/ArchivosPrelejago/") + archivo);
                    ListaEscrito.Add(Ent_Escrito);

                    i = i + 1;

                }
                ObjEscrito = new clsFacadeEscritos();

                if (ObjEscrito.ActualizarEscrito(ListaEscrito, "I", txtResolucion.Text))
                {
                    MostrarComentario("Se Actualizo Correctamente");
                }
            }
            catch (Exception ex)
            {
                MostrarComentario(ex.Message, "Error");

            }
        }
        private string ExtraeCodigo(string Cadena)
        {

            string[] Resultado = Cadena.Split(':');
            return Resultado[0];

        }
        private void Cargar_Escritos()
        {
            ObjEscrito = new clsFacadeEscritos();
            List<T_Escritos> listaEscritos = null;
            listaEscritos = new List<T_Escritos>();
            dgEscritos.DataSource = null;
            dgEscritos.DataBind();
            ObjDetalle.Equals(null);
            int i = 0;
            int count = ObjEscrito.ListarEscritos(txtResolucion.Text).Count;
            listaEscritos = ObjEscrito.ListarEscritos(txtResolucion.Text);
            miLista = new List<DetalleEscritos>();
            while (i <= count - 1)
            {
                ObjDetalle.Item = i + 1;
                ObjDetalle.TipoEscrito = listaEscritos[i].CO_TipoEscrito + ": " + listaEscritos[i].T_TipoEscritos.NO_Escrito;
                ObjDetalle.Fecha = (DateTime)listaEscritos[i].FE_Escrito;
                ObjDetalle.NombreArchivo = listaEscritos[i].no_Archivo;
                miLista.Add(ObjDetalle);
                i = i + 1;
            }
            Session["Detalle_Escritos"] = miLista;
            dgEscritos.DataSource = miLista;
            dgEscritos.DataBind();



        }
        string filePath = "";
        string archivo = "";
 
        protected void ulDocumento_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            if (e.IsValid)
            {
                filePath = Server.MapPath("~/ArchivosPrelejago/" + e.UploadedFile.FileName);
                //  string[] NombreArchivo=e.UploadedFile.FileName.Split(':');
                archivo = (string)e.UploadedFile.FileName;
                txtNomArchivo.Text =(string) e.UploadedFile.FileName;
                HiddenField1.Value = (string)e.UploadedFile.FileName;
                Session["NomArchivo"] = (string)e.UploadedFile.FileName;

                e.UploadedFile.SaveAs(filePath);


            }








        }
    }
}